Skip to main content

약수의 개수와 덧셈

문제 설명

두 정수 leftright가 매개변수로 주어집니다. left부터 right까지의 모든 수들 중에서,

약수의 개수가 짝수인 수는 더하고, 약수의 개수가 홀수인 수는 뺀 수를 return 하도록 solution 함수를 완성해주세요.

제한사항

  • 1 ≤ leftright ≤ 1,000

입출력 예

leftrightresult
131743
242752

풀이

첫 번째 풀이
def getDivisorCount(n):
count = 1
for i in range(1, n // 2 + 1):
if n % i == 0:
count += 1
return count

def solution(left, right):
sum = 0
for i in range(left, right + 1):
sum += i if getDivisorCount(i) % 2 == 0 else -i

return sum

left부터 right까지의 모든 수들 중에서, 약수의 개수가 짝수인 수는 더하고, 약수의 개수가 홀수인 수는 뺀 수를 return 해야 하므로

일단 특정 숫자의 약수의 개수를 구하는 함수 getDivisorCount()를 구현했습니다.

def getDivisorCount(n):
count = 1
for i in range(1, n // 2 + 1):
if n % i == 0:
count += 1
return count

여기서 2번 라인의 count 변수를 1로 설정한 이유는, n의 절반까지만 나누어떨어지는지 확인하게 되면 자기 자신은 나누어떨어지는지 세지 않기 때문입니다. 자기 자신은 무조건 나누어떨어지므로 1부터 시작하도록 변수를 초기화했습니다.

def solution(left, right):
sum = 0
for i in range(left, right + 1):
sum += i if getDivisorCount(i) % 2 == 0 else -i

return sum

그 후에 left부터 right까지 반복문을 돌리면서 i 값이 짝수인지 홀수인지 판별 후 짝수라면 누적하고 홀수라면 빼도록 삼항 연산자로 구현했습니다.